// 客户端
const prisma = require('./prisma')

// 从结果集中筛选,不包括哪些字段
const omitFields = {
  updated_at: true,
  deleted_at: true,
}
class refSystemModel {
  async create(auth) {
    return await prisma.refSystem.create({
      data: {
        /// 系统名称
        sys_name: auth.sys_name,
        /// 健康检查地址
        ref_system_url: auth.ref_system_url,
        remark: auth.remark || '',
      },
      omit: omitFields,
    })
  }

  // 批量处理
  async batchCreate(batchData) {
    const result = await prisma.refSystem.createMany({
      skipDuplicates: true,
      data: batchData,
    })
    return result
  }
  //
  async get(id, where = null) {
    // select 与 include 不能同时使用
    const result = await prisma.refSystem.findFirst({
      where: Object.assign({ id: id }, where),
      // 从结果集中过滤，不包括某些字段
      omit: omitFields, // 不能与select同时使用
    })
    return result
  }
  // 列表 这里官方建议使用游标
  async list(pageNo, pageSize, where = null) {
    //
    const skip = (pageNo - 1) * pageSize
    return await prisma.refSystem.findMany({
      omit: omitFields,
      skip: skip,
      take: pageSize,
      orderBy: {
        id: 'desc',
      },
      where: Object.assign({}, where),
    })
  }

  async listByWhere(where = null) {
    //
    return await prisma.refSystem.findMany({
      omit: omitFields,
      orderBy: {
        id: 'desc',
      },
      where: Object.assign({}, where),
    })
  }

  // 未删除的数据
  async count(where = null) {
    return await prisma.refSystem.count({
      where: Object.assign({}, where),
    })
  }

  // 更新
  async update(id, proj, where = null) {
    return await prisma.refSystem.update({
      omit: omitFields,
      where: Object.assign({ id: id }, where),
      data: proj,
    })
  }

  // 删除
  async del(id, where = null) {
    return await prisma.refSystem.update({
      data: {
        deleted_at: new Date(), // 逻辑删除
      },
      omit: omitFields,
      where: Object.assign({ id: id }, where),
    })
  }
}

module.exports = new refSystemModel()
